Docker 是一種容器化平台,可以讓你打包應用程式和其依賴項,並且能夠確保在不同環境中都能正常運行。每個容器都是一個輕量級、獨立、可執行的軟體單元,包含應用程式及其相依的程式庫、工具、設定等。
註冊docker帳號
Docker官網
為求方便,這邊可以用Google第三方登入就好
Docker Hub : 有許多官方的image,如Ubuntu、Debian等
下載/安裝Docker desktop
常用指令
指令 | 用法 | 功能 | 常見選項 | 使用時機 |
---|---|---|---|---|
docker run |
docker run [選項] [映像檔名稱] [指令] |
啟動一個新的容器並運行指定的映像檔 | -d :背景模式運行-p [主機端口]:[容器端口] :端口映射-e [環境變數名稱]=[值] :設定環境變數--name [容器名稱] :指定容器名稱 |
創建和運行新容器時使用,設定端口映射、環境變數等選項 |
docker build |
在包含 Dockerfile 的目錄中執行 docker build -t [映像檔名稱] . |
根據 Dockerfile 建立新的映像檔 | -t [映像檔名稱] :為生成的映像檔指定名稱 |
當需要定製映像檔或從頭構建映像檔時使用 |
docker pull |
docker pull [映像檔名稱] |
下載映像檔至本地 | 無 | 當需要使用一個已有的映像檔時使用 |
docker ps |
docker ps [選項] |
列出目前正在運行的容器 | -a :顯示所有容器-q :僅顯示容器 ID |
查看容器的運行狀態和資訊 |
docker exec |
docker exec [選項] [容器ID或名稱] [指令] |
在運行中的容器中執行指定指令 | -it :交互式操作,分配虛擬終端並連接 |
當需要在容器內部進行操作或調試時使用 |
docker stop |
docker stop [容器ID或名稱] |
停止運行中的容器 | 無 | 當需要停止容器時使用 |
docker rm |
docker rm [容器ID或名稱] |
刪除停止的容器 | 無 | 當需要移除容器時使用 |
Dockerfile 指令和語法
指令 | 用法 | 功能 |
---|---|---|
FROM |
FROM [基礎映像檔名稱]:[版本] |
指定基礎映像檔,用於構建新的映像檔 |
LABEL |
LABEL [key=value] |
添加映像檔的元資料,如維護者信息 |
ENV |
ENV [環境變數名稱]=[值] |
設定容器內部的環境變數 |
RUN |
RUN [指令] |
在映像檔內部執行命令,通常用於安裝軟體包、更新系統 |
WORKDIR |
WORKDIR /path/to/directory |
設置容器內部的工作目錄,後續指令將在此目錄下執行 |
COPY |
COPY [來源路徑] [目的路徑] |
從主機的來源路徑複製檔案或目錄到容器內部的目的路徑 |
CMD |
CMD ["指令", "參數1", "參數2", ...] |
設置容器啟動後默認執行的命令 |
**範例 Dockerfile **
# 指定基礎映像檔
FROM ubuntu:latest
# 維護者信息
LABEL maintainer="your_email@example.com"
# 設定環境變數
ENV MY_VAR=my_value
# 安裝必要的軟體包
RUN apt-get update && apt-get install -y \
software-properties-common \
python3 \
python3-pip \
&& rm -rf /var/lib/apt/lists/*
# 設置工作目錄
WORKDIR /app
# 複製檔案到工作目錄
COPY . .
# 安裝 Python 相依項目,這裡示範使用環境變數
RUN pip3 install --no-cache-dir -r requirements.txt
# 預設指令,這裡也可以使用環境變數
CMD ["python3", "app.py"]
Docker Compose 用於定義和運行多個 Docker 容器應用程式。你可以使用一個 YAML 檔案來配置應用程式的服務,然後使用單個命令來創建和啟動所有服務。
範例 docker-compose.yml
version: '3.8'
services:
web:
image: my_web_image
ports:
- "8000:8000"
environment:
- MY_VAR=my_value
volumes:
- .:/code
depends_on:
- db
db:
image: postgres:latest
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: my_database
- **ports**: 將主機的 8000 端口映射到容器的 8000 端口。
- **environment**: 設定容器的環境變數,如 `MY_VAR=my_value`。
- **volumes**: 將主機目錄掛載到容器內部目錄。
- **depends_on**: 指定服務的依賴關係,`web` 服務依賴 `db` 服務。
db
的服務。
POSTGRES_USER
、POSTGRES_PASSWORD
和 POSTGRES_DB
。Docker Compose 常用指令
指令 | 用法 | 功能 | 使用時機 |
---|---|---|---|
docker-compose up |
docker-compose up [選項] |
建立並啟動 Docker Compose 中定義的所有服務 | 當需要啟動定義在 docker-compose.yml 中的所有服務時使用 |
docker-compose down |
docker-compose down |
停止並移除 Docker Compose 中定義的所有服務 | 當需要停止並移除所有服務時使用 |
docker-compose build |
docker-compose build [服務] |
建立或重新建立服務的映像檔 | 當修改了 Dockerfile 或需要重新構建映像檔時使用 |
docker-compose ps |
docker-compose ps |
列出當前 Docker Compose 管理的所有容器 | 查看目前運行的服務狀態時使用 |
docker-compose logs |
docker-compose logs [服務] |
顯示服務的日誌輸出 | 當需要查看某個服務的日誌輸出時使用 |
docker-compose exec |
docker-compose exec [服務] [指令] |
在指定服務的容器中執行命令 | 當需要在某個服務容器內執行命令時使用 |
docker-compose stop |
docker-compose stop [服務] |
停止指定的服務 | 當需要停止某個服務時使用 |
docker-compose restart |
docker-compose restart [服務] |
重啟指定的服務 | 當需要重啟某個服務時使用 |
Step 1: 建立專案目錄 : 首先,創建一個專案目錄並進入該目錄。
mkdir hello-docker
cd hello-docker
Step 2: 建立 Python 應用程式 : 在專案目錄中,創建一個 Python 檔案,例如 app.py,並寫入以下內容:
# app.py
print("Hello, World!")
Step 3: 建立 Dockerfile
在專案目錄中,創建一個名為 Dockerfile 的文件,並寫入以下內容:
# 使用官方的 Python 3.10 映像檔作為基礎映像檔
FROM python:3.10-slim
# 設置工作目錄
WORKDIR /app
# 複製當前目錄下的所有文件到工作目錄
COPY . .
# 設置容器啟動後執行的命令
CMD ["python", "app.py"]
Step 4: 建立 Docker 映像檔
在專案目錄中,運行以下命令來建立 Docker 映像檔:
docker build -t hello-docker .
Step 5: 運行 Docker 容器
使用以下命令來運行剛剛建立的 Docker 容器:
docker run --rm hello-docker
Step 6: 登入 Docker Hub
使用以下命令登入 Docker Hub:
docker login
後輸入帳號密碼
Step 7: 標籤 Docker 映像檔
將 Docker 映像檔標籤為你的 Docker Hub 儲存庫。假設你的 Docker Hub 使用者名稱是 yourusername,並且你希望將映像檔命名為 hello-docker,你可以這樣標籤映像檔:
docker tag hello-docker yourusername/hello-docker:latest
Step 8: 推送 Docker 映像檔到 Docker Hub
使用以下命令將映像檔推送到 Docker Hub:
docker push yourusername/hello-docker:latest